package com.jinzhi.jzapi.utils;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class BackgroundColorDetectorUtil {

    public static void main(String[] args) {
//        String imagePath = "D:/upload/baidi.jpg"; // 本地图片文件路径
//        try {
//            if (!isNearWhiteBackground(imagePath, 20)) { // 参数可调整，表示颜色宽容度，默认20
//                System.out.println("错误：图片背景不是白色或接近白色。");
//            } else {
//                System.out.println("图片背景是白色或接近白色。");
//            }
//        } catch (IOException e) {
//            System.err.println("读取图片时发生错误: " + e.getMessage());
//        }
    }

    /**
     * 检查图片背景是否为白色或接近白色。
     * @param
     * @param tolerance 颜色宽容度，允许RGB值与纯白(255, 255, 255)的差值总和不超过此值的像素被视为白色
     * @return 如果图片背景接近白色则返回true，否则返回false
     * @throws IOException 如果读取图片失败
     */
    public static boolean isNearWhiteBackground(BufferedImage image, int tolerance) throws IOException {
        int width = image.getWidth();
        int height = image.getHeight();
        int nonNearWhitePixels = 0;
        int totalPixels = width * height;

        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                Color pixelColor = new Color(image.getRGB(x, y), true);
                int r = pixelColor.getRed();
                int g = pixelColor.getGreen();
                int b = pixelColor.getBlue();

                // 检查像素是否接近白色
                int diff = Math.abs(r - 255) + Math.abs(g - 255) + Math.abs(b - 255);
                if (diff > tolerance) {
                    nonNearWhitePixels++;
                }
            }
        }

        // 计算非接近白色像素占比
        double nonNearWhiteRatio = (double) nonNearWhitePixels / totalPixels;
        return nonNearWhiteRatio <= 0.85; // 假定最多85%的像素可以是非接近白色的
    }
}